import os
import numpy as np
from torch.utils.data import Dataset
import pandas as pd
import torch



# Datasetloader define
"""
当我们自定义dataloader继承我们的Dataset的类时，我们需要实现下面三个函数：
初始化函数 __init__ ：设置数据集路径，加载数据集
数据长度 __len__ ：获取数据集的大小
数据每一项获取 __getitem__ : 通过索引获取数据集以及对应的标签

"""
class iris_dataloader(Dataset):
    def __init__(self,data_path):
        self.data_path = data_path
        # check data path
        assert os.path.exists(self.data_path), "data path is not exist"
        # read data set colum's name
        df=pd.read_csv(self.data_path,names=[0,1,2,3,4])
        d={"Iris-setosa":0,"Iris-versicolor":1,"Iris-virginica":2}
        df[4]=df[4].map(d)
         #data and label read
        data=df.iloc[:,0:4]
        label=df.iloc[:,4:]
        #data mean 1
        data=(data-np.mean(data))/data.std() #z值化

        #data tupe change
        self.data=torch.from_numpy(np.array(data,dtype='float32'))
        self.label=torch.from_numpy(np.array(label,dtype='int64'))

        self.data_num=len(label)
        print("data number:",self.data_num)

    def __len__(self):
        return self.data_num
    def __getitem__(self,index):
    # return data and label
        self.data=list(self.data)
        self.label=list(self.label)
        return self.data[index],self.label[index]

